themingengine: Render inset box shadow on top of backgrounds
authorBenjamin Otte <otte@redhat.com>
Sat, 11 Jun 2011 04:19:51 +0000 (06:19 +0200)
committerBenjamin Otte <otte@redhat.com>
Sat, 11 Jun 2011 07:29:43 +0000 (09:29 +0200)
gtk/gtkshadow.c
gtk/gtkthemingengine.c

index ebb0df332b4ea9f23ad1a9e52eeab02ae051ebda..33c9d2e6448763a98ded97bd889450e4f5c1699f 100644 (file)
@@ -358,7 +358,7 @@ _gtk_box_shadow_render (GtkShadow           *shadow,
                                element->spread, element->spread);
 
       _gtk_rounded_box_path (&box, cr);
-      _gtk_rounded_box_path (padding_box, cr);
+      _gtk_rounded_box_clip_path (padding_box, cr);
 
       gdk_cairo_set_source_rgba (cr, &element->color);
       cairo_fill (cr);
index 67c790a7604b731e9436f6066f5f45a58b43a84e..47f6b9a5751dad1e4bdf0424a14bd2388114869a 100644 (file)
@@ -1387,6 +1387,7 @@ render_background_internal (GtkThemingEngine *engine,
   gboolean running;
   gdouble progress;
   GtkRoundedBox border_box;
+  GtkShadow *box_shadow;
 
   flags = gtk_theming_engine_get_state (engine);
 
@@ -1394,6 +1395,7 @@ render_background_internal (GtkThemingEngine *engine,
 
   gtk_theming_engine_get (engine, flags,
                           "background-image", &pattern,
+                          "box-shadow", &box_shadow,
                           NULL);
 
   cairo_save (cr);
@@ -1600,6 +1602,17 @@ render_background_internal (GtkThemingEngine *engine,
   if (pattern)
     cairo_pattern_destroy (pattern);
 
+  if (box_shadow != NULL)
+    {
+      GtkBorder border;
+      gtk_theming_engine_get_border (engine, flags, &border);
+      _gtk_rounded_box_shrink (&border_box,
+                               border.top, border.right,
+                               border.bottom, border.left);
+      _gtk_box_shadow_render (box_shadow, cr, &border_box);
+      _gtk_shadow_unref (box_shadow);
+    }
+
   cairo_restore (cr);
 }